package com.example.demo.thread.finals.safecar;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 位置信息类
 *
 * 通过上面的例子，我们大概了解了使用可变的类会引发什么样问题，以及如何将一个类改造成不可变类，来解决线程安全问题。最后我们总结一下实现不可变类的一些思路：
 * 	1.
 * 使用final关键字修饰所有成员变量，避免其被修改，也可以保证多线程环境下被final关键字修饰的变量所引用的对象的初始化安全，即final修饰的字段在其他线程可见时，必定是初始化完成的。
 * 	2.
 * 使用private修饰所有成员变量，可以防止子类及其他地方通过引用直接修改变量值。
 * 	3.
 * 禁止提供修改内部状态的公开接口(比如我们前面例子中的setXY方法)
 * 	4.
 * 禁止不可变类被外部继承，防止子类改变其定义的方法的行为。
 * 	5.
 * 如果类中存在数组或集合，在提供给外部访问之前需要做防御性复制
 *
 *
 * @author luowj12
 * @since 2021/6/30 15:25
 */
public class CarLocationTracker {

    private Map<String,Location2> locationMap = new ConcurrentHashMap<>();

    public void updateLocation(String carCode,double x,double y){
        //Location2 location = locationMap.get(carCode);
        Location2 location = new Location2(x,y);
        locationMap.put(carCode,location);
    }

    public Location2 getLocation(String carCode){
        return locationMap.get(carCode);
    }

    public void setLocationMap(String carCode,double x,double y){
        Location2 location = new Location2(x,y);
        locationMap.put(carCode,location);
    }

}
